package com.liliudong.template.api.admin.controller.sys;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.liliudong.template.biz.service.sys.SysDictService;
import com.liliudong.template.common.R;
import com.liliudong.template.common.dto.sys.SysDictAddDTO;
import com.liliudong.template.common.dto.sys.SysDictModifyDTO;
import com.liliudong.template.common.dto.sys.SysDictPageDTO;
import com.liliudong.template.common.vo.PageVO;
import com.liliudong.template.common.vo.sys.SysDictDetailVO;
import com.liliudong.template.common.vo.sys.SysDictListVO;
import com.liliudong.template.common.vo.sys.SysDictPageVO;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 系统-字典表
 *
 * @author ldli5
 * @date 2024-07-04 14:57:52
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/sys/dict")
public class SysDictController {

	private final SysDictService sysDictService;

	/**
	 * 添加
	 *
	 * @param sysDictAddDTO 新增dto
	 * @return {@link R }<{@link ? }>
	 */
	@SaCheckPermission("sys:dict:add")
	@PostMapping
	public R<?> addOne(@RequestBody @Validated SysDictAddDTO sysDictAddDTO) {
		sysDictService.addOne(sysDictAddDTO);
		return R.ok();
	}

	/**
	 * 删除
	 *
	 * @param id 主键
	 * @return {@link R }<{@link ? }>
	 */
	@SaCheckPermission("sys:dict:delete")
	@DeleteMapping("/{id}")
	public R<?> deleteById(@PathVariable Long id) {
		sysDictService.deleteById(id);
		return R.ok();
	}

	/**
	 * 修改
	 *
	 * @param id 主键
	 * @param sysDictModifyDTO 更新dto
	 * @return {@link R }<{@link ? }>
	 */
	@SaCheckPermission("sys:dict:modify")
	@PutMapping("/{id}")
	public R<?> modifyById(@PathVariable Long id,
	                       @RequestBody @Validated SysDictModifyDTO sysDictModifyDTO) {
		sysDictService.modifyById(id, sysDictModifyDTO);
		return R.ok();
	}

	/**
	 * 详情
	 *
	 * @param id 主键
	 * @return {@link R }<{@link SysDictDetailVO }>
	 */
	@SaCheckPermission("sys:dict:detail")
	@GetMapping("/detail/{id}")
	public R<SysDictDetailVO> detailById(@PathVariable Long id) {
		SysDictDetailVO sysDictDetailVO = sysDictService.detailById(id);
		return R.ok(sysDictDetailVO);
	}

	/**
	 * 分页查询
	 *
	 * @param sysDictPageDTO 分页查询条件
	 * @return {@link R }<{@link PageVO<SysDictPageVO> }>
	 */
	@SaCheckPermission("sys:dict:list")
	@GetMapping("/page")
	public R<PageVO<SysDictPageVO>> queryPage(SysDictPageDTO sysDictPageDTO) {
		PageVO<SysDictPageVO> page = sysDictService.queryPage(sysDictPageDTO);
		return R.ok(page);
	}

	/**
	 * 查询列表
	 *
	 * @return {@link R }<{@link SysDictListVO }>
	 */
	@SaCheckLogin
	@GetMapping("/all")
	public R<List<SysDictListVO>> queryList() {
		List<SysDictListVO> list = sysDictService.queryList();
		return R.ok(list);
	}
}
